// payment.js
const app = getApp()

Page({
  data: {
    orderId: '',
    paymentData: null,
    qrCodeUrl: '',
    orderNo: '',
    amount: 0,
    subject: '',
    isLoading: true,
    paymentStatus: 'loading', // loading, success, failed
    orderInfo: null
  },

  onLoad(options) {
    console.log('支付页面参数:', options)
    
    if (options.orderId) {
      this.setData({
        orderId: options.orderId
      })
      this.loadPaymentData()
    } else {
      wx.showToast({
        title: '订单信息错误',
        icon: 'none'
      })
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)
    }
  },

  onShow() {
    // 检查支付状态
    this.checkPaymentStatus()
  },

  // 加载支付数据
  loadPaymentData() {
    const paymentData = wx.getStorageSync('paymentData')
    const orderId = wx.getStorageSync('currentOrderId')
    
    if (paymentData && orderId) {
      this.setData({
        paymentData: paymentData,
        orderId: orderId,
        qrCodeUrl: paymentData.qrCodeUrl,
        orderNo: paymentData.orderNo,
        amount: paymentData.amount,
        subject: paymentData.subject,
        isLoading: false
      })
      
      // 自动生成二维码
      this.generateQRCode()
      
      // 开始检查支付状态
      this.checkPaymentStatus()
    } else {
      wx.showToast({
        title: '支付数据加载失败',
        icon: 'none'
      })
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)
    }
  },

  // 生成二维码
  generateQRCode() {
    console.log('开始生成二维码，支付链接:', this.data.qrCodeUrl)
    
    if (!this.data.qrCodeUrl) {
      console.error('二维码数据不存在')
      wx.showToast({
        title: '二维码数据不存在',
        icon: 'none'
      })
      return
    }
    
    wx.showLoading({ title: '生成二维码中...' })
    
    try {
      // 使用多个二维码生成服务作为备用方案
      const qrCodeServices = [
        `https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=${encodeURIComponent(this.data.qrCodeUrl)}`,
        `https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=${encodeURIComponent(this.data.qrCodeUrl)}`,
        `https://qr-server.com/api/v1/create-qr-code/?size=300x300&data=${encodeURIComponent(this.data.qrCodeUrl)}`
      ]
      
      // 先尝试第一个服务
      this.tryQRCodeService(qrCodeServices, 0)
      
    } catch (error) {
      console.error('生成二维码异常:', error)
      wx.hideLoading()
      wx.showToast({
        title: '二维码生成异常',
        icon: 'none'
      })
    }
  },

  // 尝试二维码服务
  tryQRCodeService(services, index) {
    if (index >= services.length) {
      wx.hideLoading()
      console.error('所有二维码服务都失败了')
      wx.showToast({
        title: '二维码生成失败，请使用备用方案',
        icon: 'none',
        duration: 3000
      })
      return
    }
    
    const qrCodeApi = services[index]
    console.log(`尝试二维码服务 ${index + 1}:`, qrCodeApi)
    
    // 测试二维码图片是否能正常加载
    wx.request({
      url: qrCodeApi,
      method: 'HEAD',
      success: (res) => {
        console.log(`二维码服务 ${index + 1} 请求成功:`, res.statusCode)
        this.setData({
          qrCodeImageUrl: qrCodeApi
        })
        wx.hideLoading()
      },
      fail: (err) => {
        console.error(`二维码服务 ${index + 1} 请求失败:`, err)
        // 尝试下一个服务
        this.tryQRCodeService(services, index + 1)
      }
    })
  },

  // 检查支付状态
  checkPaymentStatus() {
    if (!this.data.orderId) return
    
    // 定期检查支付状态
    this.paymentStatusTimer = setInterval(() => {
      this.queryPaymentStatus()
    }, 3000) // 每3秒检查一次
  },

  // 查询支付状态
  queryPaymentStatus() {
    const globalUserInfo = getApp().getUserInfo()
    const userId = globalUserInfo ? globalUserInfo.id : null
    
    if (!userId) return
    
    wx.request({
      url: `http://localhost:8081/viporder/viptaocanById?userid=${userId}`,
      method: 'GET',
      success: (res) => {
        if (res.data && Array.isArray(res.data)) {
          const currentOrder = res.data.find(order => order.id == this.data.orderId)
          if (currentOrder && currentOrder.status === 1) {
            // 支付成功
            this.handlePaymentSuccess()
          }
        }
      },
      fail: (err) => {
        console.error('查询支付状态失败:', err)
      }
    })
  },

  // 处理支付成功
  handlePaymentSuccess() {
    // 清除定时器
    if (this.paymentStatusTimer) {
      clearInterval(this.paymentStatusTimer)
      this.paymentStatusTimer = null
    }
    
    this.setData({
      paymentStatus: 'success'
    })
    
    wx.showToast({
      title: '支付成功！',
      icon: 'success',
      duration: 2000
    })
    
    // 清除本地存储的支付数据
    wx.removeStorageSync('paymentData')
    wx.removeStorageSync('currentOrderId')
    
    // 延迟跳转回会员页面
    setTimeout(() => {
      wx.navigateBack({
        delta: 2 // 返回两层页面
      })
    }, 2000)
  },

  // 手动检查支付状态
  onCheckPayment() {
    this.queryPaymentStatus()
  },

  // 二维码加载成功
  onQRCodeLoad() {
    console.log('二维码加载成功')
  },

  // 二维码加载失败
  onQRCodeError(e) {
    console.error('二维码加载失败:', e)
    wx.showToast({
      title: '二维码加载失败',
      icon: 'none'
    })
  },

  // 复制支付链接
  copyPaymentLink() {
    if (!this.data.qrCodeUrl) {
      wx.showToast({
        title: '支付链接不存在',
        icon: 'none'
      })
      return
    }
    
    wx.setClipboardData({
      data: this.data.qrCodeUrl,
      success: () => {
        wx.showToast({
          title: '支付链接已复制',
          icon: 'success'
        })
      },
      fail: () => {
        wx.showToast({
          title: '复制失败，请重试',
          icon: 'none'
        })
      }
    })
  },

  // 取消支付
  onCancelPayment() {
    wx.showModal({
      title: '确认取消',
      content: '确定要取消支付吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除定时器
          if (this.paymentStatusTimer) {
            clearInterval(this.paymentStatusTimer)
            this.paymentStatusTimer = null
          }
          
          // 清除本地存储
          wx.removeStorageSync('paymentData')
          wx.removeStorageSync('currentOrderId')
          
          // 返回上一页
          wx.navigateBack()
        }
      }
    })
  },

  onUnload() {
    // 页面卸载时清除定时器
    if (this.paymentStatusTimer) {
      clearInterval(this.paymentStatusTimer)
      this.paymentStatusTimer = null
    }
  }
})
